package __二叉树

import "strconv"

/*
https://leetcode.cn/problems/binary-tree-paths/

257. 二叉树的所有路径
给你一个二叉树的根节点 root ，按 任意顺序 ，返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。

示例 1：
输入：root = [1,2,3,null,5]
输出：["1->2->5","1->3"]

示例 2：
输入：root = [1]
输出：["1"]
*/
func binaryTreePaths(root *TreeNode) []string {
	//声明结果数组
	res := make([]string, 0)

	//递归方法
	var travel func(node *TreeNode, s string)

	travel = func(node *TreeNode, s string) {
		//如果当前节点左右节点为nil
		if node.Left == nil && node.Right == nil {
			v := s + strconv.Itoa(node.Val) //v = s + 当前节点的值
			res = append(res, v)            //添加到res结果数组
			return
		}

		s = s + strconv.Itoa(node.Val) + "->" //如果当前节点的左右节点有值,在字符串后添加 ->
		if node.Left != nil {                 //如果左节点有值, 递归调用左节点
			travel(node.Left, s)
		}
		if node.Right != nil { //如果右节点有值, 递归调用右节点
			travel(node.Right, s)
		}
	}

	travel(root, "")
	return res
}
